#ifndef MINI_ENGINE_DEBUGMESSENGER
#define MINI_ENGINE_DEBUGMESSENGER
#include <iostream>
#include <vulkan/vulkan.h>
#include "Instance.h"

namespace mini_engine
{
    class DebugMessenger
    {
    private:
        DebugMessenger();
        static DebugMessenger *m_debugMessenger;
        VkDebugUtilsMessengerEXT debugMessenger;
        static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData, void *pUserData);
        VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pDebugMessenger);
        void populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT &createInfo);
        class DebugMessengerDestruction
        {
        public:
            ~DebugMessengerDestruction();
        };

    public:
        void setupDebugMessenger();
        static DebugMessenger *getDebugMessenger();
        ~DebugMessenger();
    };
}

#endif